Skip to content

匹配动画窗口 - MatchAnimationFromPath

函数简介

匹配动画窗口,可用于GIF动画识别,在指定时间内识别动图,查找到立即返回结果,返回相对绑定窗口坐标。

接口名称

MatchAnimationFromPath

DLL调用

long MatchAnimationFromPath(long ola, int x1, int y1, int x2, int y2, string templ, double matchVal, int type, double angle, double scale, int delay, int time, int threadCount);

参数说明

参数名类型说明
ola长整数型OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。
x1整数型查找区域的左上角X坐标
y1整数型查找区域的左上角Y坐标
x2整数型查找区域的右下角X坐标
y2整数型查找区域的右下角Y坐标
templ字符串模板图片的路径,可以是多个图片,如"test.bmp|test2.bmp|test3.bmp"
matchVal双精度浮点数相似度阈值,范围0-1,如0.85表示85%相似度
type整数型匹配类型:1-灰度匹配(速度快);2-彩色匹配;3-透明匹配;4-透明彩色权重匹配;5-普通彩色匹配
angle双精度浮点数旋转角度,每次匹配后旋转指定角度继续匹配,角度越小匹配次数越多时间越长,0为不旋转速度最快
scale双精度浮点数窗口缩放比例,默认为1,可通过GetScaleFromWindows接口获取
delay整数型动画帧间隔,单位毫秒
time整数型总识别时间,单位毫秒
threadCount整数型用于查找的线程数,需根据delay帧率自行调整,过小会导致识别时间到期未识别完,过大会导致CPU占用过高

示例

SDK 调用

cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
// 0,0,0,0 表示绑定窗口整个客户区
MatchData result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4);
if (result.MatchState) {
    int x = result.X;
    int y = result.Y;
}
csharp
using OLAPlug;

var ola = new OLAPlugServer();
// 0,0,0,0 表示绑定窗口整个客户区
var result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4);
if (result.MatchState)
{
    int x = result.X;
    int y = result.Y;
}
python
from OLAPlugServer import OLAPlugServer

ola = OLAPlugServer()
# 0,0,0,0 表示绑定窗口整个客户区
result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4)
if result.get("MatchState"):
    x = result["X"]
    y = result["Y"]
java
import com.olaplug.OLAPlugServer;
import com.olaplug.model.MatchResult;
import java.util.List;

OLAPlugServer ola = new OLAPlugServer();
MatchResult result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4);
if (result != null && result.MatchState) {
    int x = result.X;
    int y = result.Y;
}
cpp
var ola = com("OlaPlug.OlaSoft")
var result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4)
if(result.MatchState) {
    var x = result.X
}
vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
Set result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4)
If result.MatchState Then
text
.局部变量 ola, OLAPlug
ola.创建 ()
result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4)
.如果真 (result.MatchState)
aardio
import OLAPlugServer;
var ola = OLAPlugServer();
var result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4);
if(result.MatchState){
    var x = result.X;
}
text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
MatchData result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4)
如果真 (result.MatchState)
cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
// 0,0,0,0 表示绑定窗口整个客户区
MatchData result = ola.MatchAnimationFromPath(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4);
if (result.MatchState) {
    int32_t x = result.X;
    int32_t y = result.Y;
}

原生 DLL 调用

cpp
long instance = CreateCOLAPlugInterFace();
long ptr = MatchAnimationFromPath(instance, 0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4);
if (ptr != 0) {
    int matchState = 0, x = 0, y = 0, width = 0, height = 0, index = 0;
    double matchVal = 0, angle = 0;
    char json[4096] = {0};
    GetStringFromPtr(ptr, json, sizeof(json));
    ParseMatchImageJson(instance, json, &matchState, &x, &y, &width, &height, &matchVal, &angle, &index);
    FreeStringPtr(instance, ptr);
}
csharp
using System.Runtime.InteropServices;
using System.Text;

[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringFromPtr(long ptr, StringBuilder lpString, int size);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int FreeStringPtr(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringSize(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long CreateCOLAPlugInterFace();
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long MatchAnimationFromPath(long ola, int x1, int y1, int x2, int y2, string templ, double matchVal, int type, double angle, double scale, int delay, int time, int threadCount);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int ParseMatchImageJson(string str, out int matchState, out int x, out int y, out int width, out int height, out double matchVal, out double angle, out int index);

long instance = CreateCOLAPlugInterFace();
long ptr = MatchAnimationFromPath(instance, 0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1, 200, 3000, 4);
if (ptr != 0) {
    StringBuilder sb = new StringBuilder(GetStringSize(ptr) + 1);
    GetStringFromPtr(ptr, sb, sb.Capacity);
    FreeStringPtr(ptr);
    ParseMatchImageJson(sb.ToString(), out int matchState, out int x, out int y, out int w, out int h, out double mv, out double ang, out int idx);
}
python
from ctypes import CDLL, c_int, c_int64, create_string_buffer

ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
instance = ola.CreateCOLAPlugInterFace()
ptr = ola.MatchAnimationFromPath(instance, ...)
# 原生返回 JSON 字符串指针,可用 ParseMatchImageJson 解析

返回值

字符串指针,返回JSON格式的匹配结果。DLL调用返回字符串指针地址,需要调用 FreeStringPtr 接口释放内存。

返回数据格式:

json
{
    "MatchVal": 0.85,
    "MatchState": true,
    "Index": 0,
    "Angle": 45.0,
    "X": 100,
    "Y": 200,
    "Width": 100,
    "Height": 100
}
字段名类型说明
MatchVal浮点数匹配相似度。
MatchState布尔是否匹配成功。
Index整数结果索引(从 0 开始)。
Angle浮点数匹配角度。
X整数X 坐标。
Y整数Y 坐标。
Width整数宽度。
Height整数高度。

注意事项

  • x1、y1、x2、y2都传0时,将搜索整个窗口客户区
  • 识别结果最长等待时间为 time + 1000ms
  • 返回的坐标是相对于绑定窗口客户区的坐标